<?php

/**
 * descripciones actions.
 *
 * @package    SistemaWebUnlSenescyt
 * @subpackage descripciones
 * @author     JFernando
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class descripcionesActions extends sfActions {

    protected $idtp;
    protected $idac;

    public function executeGraba(sfWebRequest $request) {


        if (isset($_POST['id']) && isset($_POST['firstname']) && isset($_POST['lastname'])) {
            $id = mysql_escape_String($_POST['id']);
            $firstname = mysql_escape_String($_POST['firstname']);
            $lastname = mysql_escape_String($_POST['lastname']);

            $q = Doctrine_Query::create()
                    ->from('descripcion d')
                    ->where('d.id_de = ?', $id);
            $de = $q->fetchOne();
            $de->setCodigo($firstname);
            $de->setNombre($lastname);
            $de->save();
          
        }
    }

    
    
    
    
    public function executeIndex(sfWebRequest $request) {
        $this->idtp = $request->getParameter('id_tp');
        $this->getUser()->setAttribute('id_tp', $this->idtp);
        //$this->getUser()->setAttribute('id_ac', $idac);
        $this->idac = $this->getUser()->getAttribute('id_ac');

        $this->descripcions = Doctrine::getTable('descripcion')->createQuery('d')
                ->where('d.id_tp = ?', $this->idtp)
                ->andWhere('d.id_ac = ?', $this->idac)
                ->execute();


        $q1 = Doctrine_Query::create()
                ->from('techospresupuestarios t')
                ->where('t.id_tp=?', $this->idtp);
        $this->rubro = $q1->fetchOne();


        $q2 = Doctrine_Query::create()
                ->from('actividad a')
                ->where('a.id_ac=?', $this->idac);
        $this->actividad = $q2->fetchOne();

        $q3 = Doctrine_Query::create()
                ->from('objetivo o')
                ->where('o.id_ob=?', $this->actividad->getIdOb());
        $this->objetivo = $q3->fetchOne();

        $q4 = Doctrine_Query::create()
                ->from('proyecto p')
                ->where('p.id_pro=?', $this->objetivo->getIdPro());
        $this->proyecto = $q4->fetchOne();
    }

    public function executeShow(sfWebRequest $request) {
        $this->descripcion = Doctrine_Core::getTable('descripcion')->find(array($request->getParameter('id_de')));
        $this->forward404Unless($this->descripcion);
    }

    public function executeNew(sfWebRequest $request) {
        $this->idtp="";
        $this->idtp = $request->getParameter('id_tp');
        $this->getUser()->setAttribute('id_tp', $this->idtp);
        $this->form = new descripcionForm();
    }
    
    

    public function executeCreate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST));

        $this->form = new descripcionForm();

        $this->processForm($request, $this->form);

        $this->setTemplate('new');
    }

    public function executeEdit(sfWebRequest $request) {
        $this->forward404Unless($descripcion = Doctrine_Core::getTable('descripcion')->find(array($request->getParameter('id_de'))), sprintf('Object descripcion does not exist (%s).', $request->getParameter('id_de')));
        $this->form = new descripcionForm($descripcion);
    }

    public function executeUpdate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
        $this->forward404Unless($descripcion = Doctrine_Core::getTable('descripcion')->find(array($request->getParameter('id_de'))), sprintf('Object descripcion does not exist (%s).', $request->getParameter('id_de')));
        $this->form = new descripcionForm($descripcion);

        $this->processFormEdit($request, $this->form);

        $this->setTemplate('edit');
    }

    public function executeDelete(sfWebRequest $request) {
        $request->checkCSRFProtection();

        $this->forward404Unless($descripcion = Doctrine_Core::getTable('descripcion')->find(array($request->getParameter('id_de'))), sprintf('Object descripcion does not exist (%s).', $request->getParameter('id_de')));
        $descripcion->delete();
        $this->getUser()->setFlash('notice', 'Descripción Borrada Correctamente!');
        //$this->redirect('descripciones/index?');
        $this->redirect('descripciones/index?id_tp=' . $this->getUser()->getAttribute('id_tp'));
    }

    protected function processFormEdit(sfWebRequest $request, sfForm $form) {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid()) {
            $descripcion = $form->save();
            $this->redirect('descripciones/index?id_tp=' . $this->getUser()->getAttribute('id_tp'));
        }
    }

    protected function processForm(sfWebRequest $request, sfForm $form) {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid()) {
            //$ff = new Descripcion();
            //$this->getUser()->getAttribute('id_tp');
            //$this->getUser()->getAttribute('id_ac');
            //$ff->setIdAc()
            //$ff->getIdAc()
            $form->getObject()->setIdAc($this->getUser()->getAttribute('id_ac'));
            $form->getObject()->setIdTp($this->getUser()->getAttribute('id_tp'));
            $descripcion = $form->save();
            //consulta a la inversa para obtener ID's de fondos tanto FONDO1 como FONDO2
            //obteniendo id de objetivo
            $q = Doctrine_Query::create()
                    ->from('actividad a')
                    ->where('a.id_ac=?', $descripcion->getIdAc());
            $ac = $q->fetchOne();
            //obteniendo id de proyecto
            $q1 = Doctrine_Query::create()
                    ->from('objetivo o')
                    ->where('o.id_ob=?', $ac->getIdOb());
            $obj = $q1->fetchOne();

            //obteniendo la lista de los fondos del proyecto

            $q2 = Doctrine_Query::create()
                    ->from('fondo f')
                    ->where('f.id_pro = ?', $obj->getIdPro())
                    ->andWhere('f.defecto = 0');

            $fondoc = $q2->fetchOne();


            $q3 = Doctrine_Query::create()
                    ->from('fondo f')
                    ->where('f.id_pro = ?', $obj->getIdPro())
                    ->andWhere('f.defecto = 1');

            $fondod = $q3->fetchOne();


            //obteniendo el numero de meses que tiene el periodo del objetivo
            //$totalmeses = $this->contarmeses($obj->getPeriodos()->getFechai(), $obj->getPeriodos()->getFechaf());
            //obteniendo id's de los fondos del proyecto
//            foreach ($fondos as $fond):
//                //fondo por defecto
//                if ($fond->getDefecto() == 1) {
            $idfd = $fondod->getIdFo();
//                } else {
            //fondo contraparte
//                    if ($fond->getDefecto() == 0) {
            $idfc = $fondoc->getIdFo();
//                    }
//                }
//            endforeach;


            $fi = explode("-", $obj->getPeriodos()->getFechai());
            $ff = explode("-", $obj->getPeriodos()->getFechaf());
            $ai = $fi[0];
            $mi = $fi[1];
            $af = $ff[0];
            $mf = $ff[1];

            //for ($i = 0; $i < $totalmeses; $i++) {
            if ($ai == $af) {
                while ($mi <= $mf) {
                    $valorfd = new Valor();
                    $valorfd->setIdDe($descripcion->getIdDe());
                    $valorfd->setIdFo($idfd);
                    $valorfd->setMes($mi);
                    $valorfd->setAnio($ai);
                    $valorfd->setVal(0.00);
                    $valorfd->save();

                    $valorfc = new Valor();
                    $valorfc->setIdDe($descripcion->getIdDe());
                    $valorfc->setIdFo($idfc);
                    $valorfc->setMes($mi);
                    $valorfc->setAnio($ai);
                    $valorfc->setVal(0.00);
                    $valorfc->save();
                    $mi = $mi + 1;
                }
            } else {
                //caso 2
                //cuando el periodo es superior a 2 anios 
                $totalanios = $af - $ai;
                if ($totalanios == 1) {

                    while ($mi <= 12) {
                        $valorfd = new Valor();
                        $valorfd->setIdDe($descripcion->getIdDe());
                        $valorfd->setIdFo($idfd);
                        $valorfd->setMes($mi);
                        $valorfd->setAnio($ai);
                        $valorfd->setVal(0.00);
                        $valorfd->save();

                        $valorfc = new Valor();
                        $valorfc->setIdDe($descripcion->getIdDe());
                        $valorfc->setIdFo($idfc);
                        $valorfc->setMes($mi);
                        $valorfc->setAnio($ai);
                        $valorfc->setVal(0.00);
                        $valorfc->save();


                        $mi = $mi + 1;
                    }
                    $aux = 1;
                    while ($aux <= $mf) {

                        $valorfd = new Valor();
                        $valorfd->setIdDe($descripcion->getIdDe());
                        $valorfd->setIdFo($idfd);
                        $valorfd->setMes($aux);
                        $valorfd->setAnio($af);
                        $valorfd->setVal(0.00);
                        $valorfd->save();

                        $valorfc = new Valor();
                        $valorfc->setIdDe($descripcion->getIdDe());
                        $valorfc->setIdFo($idfc);
                        $valorfc->setMes($aux);
                        $valorfc->setAnio($af);
                        $valorfc->setVal(0.00);
                        $valorfc->save();


                        $aux++;
                    }
                } else {
                    //caso 3
                    //cuando el periodo es superior a 3 anios 

                    if ($totalanios > 1) {

                        while ($mi <= 12) {
                            $valorfd = new Valor();
                            $valorfd->setIdDe($descripcion->getIdDe());
                            $valorfd->setIdFo($idfd);
                            $valorfd->setMes($mi);
                            $valorfd->setAnio($ai);
                            $valorfd->setVal(0.00);
                            $valorfd->save();

                            $valorfc = new Valor();
                            $valorfc->setIdDe($descripcion->getIdDe());
                            $valorfc->setIdFo($idfc);
                            $valorfc->setMes($mi);
                            $valorfc->setAnio($ai);
                            $valorfc->setVal(0.00);
                            $valorfc->save();

                            $mi = $mi + 1;
                        }

                        $auxai = $ai + 1;
                        $auxaf = $af - 1;
                        while ($auxai <= $auxaf) {
                            for ($i = 1; $i <= 12; $i++) {
                                $valorfd = new Valor();
                                $valorfd->setIdDe($descripcion->getIdDe());
                                $valorfd->setIdFo($idfd);
                                $valorfd->setMes($i);
                                $valorfd->setAnio($auxai);
                                $valorfd->setVal(0.00);
                                $valorfd->save();

                                $valorfc = new Valor();
                                $valorfc->setIdDe($descripcion->getIdDe());
                                $valorfc->setIdFo($idfc);
                                $valorfc->setMes($i);
                                $valorfc->setAnio($auxai);
                                $valorfc->setVal(0.00);
                                $valorfc->save();
                            }
                            $auxai = $auxai + 1;
                        }
                        $aux = 1;
                        while ($aux <= $mf) {
                            $valorfd = new Valor();
                            $valorfd->setIdDe($descripcion->getIdDe());
                            $valorfd->setIdFo($idfd);
                            $valorfd->setMes($aux);
                            $valorfd->setAnio($af);
                            $valorfd->setVal(0.00);
                            $valorfd->save();

                            $valorfc = new Valor();
                            $valorfc->setIdDe($descripcion->getIdDe());
                            $valorfc->setIdFo($idfc);
                            $valorfc->setMes($aux);
                            $valorfc->setAnio($af);
                            $valorfc->setVal(0.00);
                            $valorfc->save();

                            $aux++;
                        }
                    }
                }
            }

            $this->getUser()->setFlash('notice', 'Descripción Guardada Correctamente!');
            $this->redirect('descripciones/index?id_tp=' . $this->getUser()->getAttribute('id_tp'));
        }
    }

}
